const fs = require('fs');
const path = require('path');

//使用绝对路径
const dbPath = path.resolve(__dirname, '../data/db.json');

//分装   fs.readFile(dbPath, 'utf8', fn)  fs.writeFile(dbPath, fileData, fn） 


function readFile(fn) {
  fs.readFile(dbPath, 'utf8', fn)
}

function writeFile(fileData, fn) {
  fs.writeFile(dbPath, fileData, err => {
    if (err) {
      return fn(err)
    }
    fn(null)
  })

}


// 路由对应的方法  exports 导出
exports.save = function (todo, cb) {
  readFile((err, data) => {
    if (err) {
      return cb(err)
    }
    const todoList = JSON.parse(data).todoList;
    todoList.push(todo);
    const fileData = JSON.stringify({
      todoList: todoList
    })

    writeFile(fileData, (err) => {
      if (err) {
        return cb(err)
      }
      cb(null, todoList)
    })
  })
}

exports.updataById = function (id, cb) {
  readFile((err, data) => {
    if (err) {
      return cb(err)
    }

    const todoList = JSON.parse(data).todoList;
    let todo = todoList.find(v => v.id === id);
    todo.completed = !todo.completed;
    const fileData = JSON.stringify({
      todoList: todoList
    })
    writeFile(fileData, err => {
      if (err) {
        return cb(err)
      }
      cb(null, todoList)
    })
  })
}

exports.deleteById = function (id, cb) {
  readFile((err, data) => {
    if (err) {
      return cb(err)
    }

    const todoList = JSON.parse(data).todoList;
    const newData = todoList.filter(v => v.id !== id);

    const fileData = JSON.stringify({
      todoList: newData
    })
    writeFile(fileData, err => {
      if (err) {
        return cb(err)
      }
      cb(null, newData)
    })
  })
}



exports.find = function (cb) {
  readFile((err, data) => {
    if (err) {
      return cb(err)
    }
    cb(null, JSON.parse(data).todoList)
  })
}



